const bodyParser = require('body-parser')
let { list } = require('./mock/index.js')
const Mock = require('mockjs')
// 用户用户
const userList = require('./mock/user.json');
// token 生成验证插件
const JWT = require('jsonwebtoken')
// token 秘钥
const privateKey = '666666'
module.exports = app => {
	// 处理json数据， 并挂载到 req.body
	app.use(bodyParser.json())

	// 登录
	app.post('/api/login', (req, res) => {
		// 1. 获取用户名和密码
		const { username, password } = req.body;
		// 2. 验证账户密码
		const user = userList.find(v => v.username === username && v.password === password);
		// 3. 判断验证结果
		if (user) {
			// 存在
			res.send({
				code: 200,
				data: {
					username: user.username,
					nickname: user.nickname,
					avator: user.avator,
					role: user.role,
					token: JWT.sign({
						username: user.username,
						nickname: user.nickname,
						avator: user.avator,
						role: user.role,
					}, privateKey)
				},
				message: '登录成功， 欢迎用户' + user.nickname
			})
		} else {
			// 不存在
			res.send({
				code: 401,
				data: null,
				message: '账户密码错误， 请重新登录！！'
			})
		}
	})

	// 获取用户信息
	app.get('/api/user/info', (req, res) => {
		const { token } = req.query;
		try {
			const data = JWT.verify(token, privateKey);
			res.send({
				code: 200,
				message: '获取用户信息成功',
				data
			})
		} catch {
			res.send({
				code: 403,
				message: '非法token, 请重新登录',
				data: null
			})
		}

	})

	// 获取列表
	app.get('/api/list', (req, res) => {
		// 1. 获取参数数据
		const { searchValue, type, desc } = req.query;
		let newList = []
		// 2. 筛选
		// 2-1 是否模糊搜索
		if (searchValue) {
			newList = list.filter(v => {
				return v.id.includes(searchValue) ||
					v.title.includes(searchValue) ||
					v.type.includes(searchValue) ||
					v.price.toString().includes(searchValue)
			})
		} else {
			newList = [...list]
		}
		// 2-2 type 查询类型
		if(type && type !== '全部') {
			newList = newList.filter(v => v.type === type)
		}

		// 2-3 排序 
		if(desc && desc !== '默认') {
			newList.sort((a, b) => {
				if(desc === '升序')  return a.price - b.price
				if(desc === '降序')  return b.price - a.price
			})
		}

		// 3. 返回结果
		res.send({
			code: 200,
			data: newList
		})
	})

	// 删除列表请求
	app.delete('/api/list/:id', (req, res) => {
		// 获取动态路由参数.
		const { id } = req.params;
		// 通过 id 进行删选  
		// 支持多个删除
		// id： 110
		// id: 110, 120, 130, 140
		list = list.filter(v => {
			// 条件  
			// 支持删除多个id
			return !id.includes(v.id)
		})
		// 返回结果
		res.send({
			code: 200,
			message: '删除成功'
		})
	})

	// 列表修改请求
	app.post('/api/list/:id', (req, res) => {
		const { id } = req.params;
		const item = list.find(v => v.id === id);
		if (item) {
			Object.assign(item, req.body);

			res.send({
				code: 200, message: '修改成功'
			})
		} else {
			res.send({
				code: 400, message: '修改失败'
			})
		}
	})

	// 列表添加请求
	app.post('/api/list', (req, res) => {
		req.body.id = Mock.Random.id();

		list.unshift(req.body);

		res.send({
			code: 200,
			message: '数据添加成功！！'
		})
	})
}